package com.mayfool.gitmanager.ui;

import javax.swing.*;
import java.awt.*;
import java.io.File;

/**
 * @author zhou.xu
 * @description: 目录选择器组件
 * 提供目录选择功能，包含文本框显示路径和选择按钮
 * 使用JFileChooser实现目录选择对话框
 * @date 2025/3/10 18:11
 * @since JDK 1.8
 */
public class DirChooser extends JPanel {

    /**
     * 当前选择的目录路径
     */
    private String dir;

    /**
     * 目录路径显示文本框
     */
    private final JTextField dirField;

    /**
     * 构造函数
     * @param text 选择按钮显示的文本
     */
    public DirChooser(String text) {
        // 初始化目录路径文本框
        dirField = new JTextField();
        dirField.setPreferredSize(new Dimension(200, 28));
        
        // 创建目录选择按钮
        JButton selectWorkspaceBtn = new JButton(text);

        // 添加按钮点击事件
        selectWorkspaceBtn.addActionListener(e1 -> {
            File workspaceDir = chooseWorkspace();
            if (workspaceDir != null) {
                dir = workspaceDir.getAbsolutePath();
                dirField.setText(dir);
            }
        });

        // 添加组件到面板
        add(dirField);
        add(selectWorkspaceBtn);
    }

    /**
     * 显示目录选择对话框
     * @return 用户选择的目录，如果取消则返回null
     */
    private File chooseWorkspace() {
        JFileChooser chooser = new JFileChooser();
        // 设置只能选择目录
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
            return chooser.getSelectedFile();
        }
        return null;
    }

    /**
     * 设置目录路径
     * @param dir 目录路径
     */
    public void setDir(String dir) {
        this.dir = dir;
        dirField.setText(dir);
    }

    /**
     * 获取当前选择的目录路径
     * @return 目录路径
     */
    public String getDir() {
        return dir;
    }
}
